package cliente;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.rmi.RemoteException;

import libreriaChat.IfzCliente;
import libreriaChat.ManejadorMensaje;
import libreriaRMI.ManejadorRegistroRMI;

public class ClienteMain implements IfzCliente{
	private static ManejadorMensaje servidor;
	private static Cliente cliente;
	private static InterfazCliente frame;
	
	public static void main(String args[]) {
        if (System.getSecurityManager() == null) {
            System.setSecurityManager(new SecurityManager());
        }
        try {
        	frame = new InterfazCliente();

            frame.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {System.exit(0);}
            });

            frame.pack();
            frame.setVisible(true);
        	
        	// Nombre del objeto remoto
            String name = "Servidor";
            // args[0] es la direccion del registry
            // Obtenemos el objeto remoto que es del tipo de esa interface
            /* Registry registry = LocateRegistry.getRegistry(ManejadorTeclado.LeerTexto("Inserte el servidor: "));
            servidor = (ManejadorMensaje) registry.lookup(name); */
            servidor = (ManejadorMensaje) ManejadorRegistroRMI.obtenerObjetoRemoto("Servidor", "localhost");
            cliente=new Cliente(ManejadorTeclado.LeerTexto("Inserte su Nick: "));
            
            // Lanzamos un hilo para gestionar la escritura del cliente en el chat
            Thread escritor=new Thread(){
            	private boolean salir=false;
            	
            	public void run() {
            		String cadena="";
            		while(!salir){
            			cadena=ManejadorTeclado.LeerTexto("Inserte Mensaje: ");
            			if(cadena.equals("salir"))
            				salir=true;
						else
							try {
								servidor.enviarMensaje(cliente.getNick() + " dice: " + cadena);
							} catch (RemoteException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
            		}
            	}
            };
            
            // Lanzamos un hilo para gestionar la lectura del cliente en el chat
            Thread lector=new Thread(){            	
            	public void run() {
            		while(true){
            			try {
							// ManejadorPantalla.EscribirTexto(servidor.recibirMensajes());
            				frame.EscribirMensajes(servidor.recibirMensajes());
						} catch (RemoteException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						try {
							this.sleep(1000);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
            		}
            	}
            };
            
            escritor.start();
            lector.start();
        } catch (Exception e) {
            System.err.println("Error en el Cliente, por:");
            e.printStackTrace();
        }
    }

	@Override
	public void escribirMensajes(String msg) {
		// TODO Auto-generated method stub
		try {
			frame.EscribirMensajes(servidor.recibirMensajes());
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public String getNick() {
		return cliente.getNick();
	}
}
